package com.twoGroup.boot.mapper;


import com.twoGroup.boot.pojo.GoodsAndShopAndGoodsTypeAndGoodsBrand;
import com.twoGroup.boot.pojo.ShopAndUser;
import com.twoGroup.boot.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.ArrayList;
import java.util.List;

@Mapper
@Repository
public interface AdminMapper {

    /**
     *管理员对用户的增删改查
     */

    /**
     * 管理员增加用户
     */

    public int adminAddUser(@Param("nickname") String nickname, @Param("sex") String sex, @Param("age") int age, @Param("password") String password, @Param("telephone") String telephone, @Param("email") String email, @Param("address") String address, @Param("idCard") String idCard, @Param("rName") String rName);

    /**
     * 管理员删除用户
     */
    public int adminDeleteUser(@Param("userId") int userId);

    /**
     * 管理员修改用户信息
     */
    public int adminUpdateUser(@Param("userId") int UserId, @Param("nickname") String nickname, @Param("sex") String sex,  @Param("telephone") String telephone,@Param("rName") String rName);

    /**
     * 管理员查询用户信息
     */
    public List<User> adminQueryUser(@Param("userId") int userId);

    /**
     *管理员对商家的增删改查
     */

    /**
     * 管理员增加商家
     */

    public int adminAddShopper(String nickname, @Param("sex") String sex, @Param("age") int age, @Param("password") String password, @Param("telephone") String telephone, @Param("email") String email, @Param("address") String address, @Param("idCard") String idCard, @Param("rName") String rName);

    /**
     * 管理员删除商家
     */
    public int adminDeleteShopper(@Param("userId") int userId);

    /**
     * 管理员修改商家信息
     */
    public int adminUpdateShopper(@Param("userId") int UserId, String nickname, @Param("sex") String sex, @Param("age") int age, @Param("password") String password, @Param("telephone") String telephone, @Param("email") String email, @Param("address") String address, @Param("idCard") String idCard, @Param("rName") String rName);

    /**
     * 管理员查询商家信息
     */
    public List<User> adminQueryShopper(@Param("userId") int userId);


    /**
     * 管理员对商品的删除、查询
     */

    /**
     * 管理员删除商品
     */
    public int adminDeleteGoods(@Param("goodsId") int goodsId);

    /**
     * 管理员查询商品信息
     */
    //   public List<GoodsAndShopAndGoodsTypeAndGoodsBrand> adminQueryGoods(int goodsId);


    /**
     * 管理员对店铺的删除查询
     */

    /**
     * 管理员删除店铺
     */
    public int adminDeleteShop(@Param("shopId") int shopId);

    /**
     * 管理员查询店铺信息
     */
    public List<ShopAndUser> adminQueryShop(int shopId);


    /**
     * 管理员对申请列表的管理
     */

    /**
     * 管理员同意用户成为商家
     */
    public int agreeUserToBeShopper(@Param("userId") int userId);

    /**
     * 管理员不同意用户成为商家
     */
    public int disagreeUserToBeShopper(@Param("userId") int userId);

    /**
     * 管理员同意商品上架
     */
    public int agreeGoodsToBePutOnSale(@Param("goodsId") int goodsId);

    /**
     * 管理员不同意商品上架
     */
    public int disagreeGoodsToBePutOnSale(@Param("goodsId") int goodsId);


    /**
     * 模糊查询用户、商家、商品、店铺信息
     */

    /**
     * 根据名称模糊查询用户
     */
    public List<User> likeUserByNickName(@Param("nickName") String nickName);

    /**
     * 根据名称模糊查询商家
     */
    public List<User> likeShopperByNickName(@Param("nickName") String nickName);

    /**
     * 根据名称模糊查询商品
     */
    public List<GoodsAndShopAndGoodsTypeAndGoodsBrand> likeGoods(@Param("goodsName") String goodsName);

    /**
     * 根据名称模糊查询店铺
     */
    public List<ShopAndUser> likeShop(@Param("shopName") String shopName);

    /**
     * 查询全部每张表全部信息
     */
    public List<User> FindAllUser();

    public List<User> FindAllShopper();

    public List<ShopAndUser> FindAllShop();

    public List<GoodsAndShopAndGoodsTypeAndGoodsBrand> FindAllGoods();

//    管理列表

    /**
     * 模糊查询申请成为商家的用户、申请上架的商品
     */
    public List<User> likeAllUserToBeShopper(@Param("nickName") String nickName);

    public List<GoodsAndShopAndGoodsTypeAndGoodsBrand> likeAllGoodsToBePutOnSale(@Param("goodsName") String goodsName);

    /**
     * 查询申请成为商家的用户、申请上架的商品的全部数据
     */
    public List<User> FindAllUserToBeShopper();

    public List<GoodsAndShopAndGoodsTypeAndGoodsBrand> FindAllGoodsToBePutOnSale();


//   分页的原生方法

    /**
     * 查询用户总记录数
     */
    public Integer getUserCount();
    /**
     * 通过分页查询所有用户
     */
    public ArrayList<User> selectUserByPage(@Param(value = "start") int start, @Param(value = "pageSize") int pageSize);
    /**
     *分页下通过昵称模糊查询用户
     */
    public ArrayList<User> likeUserByPage(@Param(value = "start") int start, @Param(value = "pageSize") int pageSize, @Param(value = "nickName") String nickName);

    /**
     * 查询商家总记录数
     */
    public Integer getShopperCount();
    /**
     * 通过分页查询所有商家
     */
    public ArrayList<User> selectShopperByPage(@Param(value = "start") int start, @Param(value = "pageSize") int pageSize);
    /**
     *分页下通过昵称模糊查询商家
     */
    public ArrayList<User> likeShopperByPage(@Param(value = "start") int start, @Param(value = "pageSize") int pageSize, @Param(value = "nickName") String nickName);
    /**
     * 查询商品总记录数
     */
    public Integer getGoodsCount();
    /**
     * 通过分页查询所有商品
     */
    public ArrayList<GoodsAndShopAndGoodsTypeAndGoodsBrand> selectGoodsByPage(@Param(value = "start") int start, @Param(value = "pageSize") int pageSize);
    /**
     *分页下通过昵称模糊查询商品
     */
    public ArrayList<GoodsAndShopAndGoodsTypeAndGoodsBrand> likeGoodsByPage(@Param(value = "start") int start, @Param(value = "pageSize") int pageSize, @Param(value = "goodsName") String goodsName);
    /**
     * 查询店铺总记录数
     */
    public Integer getShopCount();
    /**
     * 通过分页查询所有店铺
     */
    public ArrayList<ShopAndUser> selectShopByPage(@Param(value = "start") int start, @Param(value = "pageSize") int pageSize);
    /**
     *分页下通过昵称模糊查询店铺
     */
    public ArrayList<ShopAndUser> likeShopByPage(@Param(value = "start") int start, @Param(value = "pageSize") int pageSize, @Param(value = "shopName") String shopName);

    /**
     * 查询申请成为商家的用户总记录数
     */
    public Integer getUserToBeShopperCount();
    /**
     * 通过分页查询所有申请成为商家的用户
     */
    public ArrayList<User> selectUserToBeShopperByPage(@Param(value = "start") int start, @Param(value = "pageSize") int pageSize);
    /**
     *分页下通过昵称模糊查询申请成为商家的用户
     */
    public ArrayList<User> likeUserToBeShopperByPage(@Param(value = "start") int start, @Param(value = "pageSize") int pageSize, @Param(value = "nickName") String nickName);
    /**
     * 查询申请上架商品总记录数
     */
    public Integer getGoodsToBePutOnSaleCount();
    /**
     * 通过分页查询所有申请上架的商品
     */
    public ArrayList<GoodsAndShopAndGoodsTypeAndGoodsBrand> selectGoodsToBePutOnSaleByPage(@Param(value = "start") int start, @Param(value = "pageSize") int pageSize);
    /**
     *分页下通过昵称模糊查询申请上架的商品
     */
    public ArrayList<GoodsAndShopAndGoodsTypeAndGoodsBrand> likeGoodsToBePutOnSaleByPage(@Param(value = "start") int start, @Param(value = "pageSize") int pageSize, @Param(value = "goodsName") String goodsName);

    /**
     * 查重操作
     *
     */
    public int checkNicknameIsSingle(@Param("nickname") String nickname);
    public int checkTelephoneIsSingle(@Param("telephone") String telephone);
    public int checkEmailIsSingle(@Param("email") String email);

    /**
     * 判断删除的对象是否存在
     */
    public int cheUserIdIsPresent(@Param("userId") int userId);
    public int checkShopIdIsPresent(@Param("shopId") int shopId);
    public int checkGoodsIdIsPresent(@Param("goodsId") int goodsId);

    /**
     * 批量删除
     */
//    public int deleteManyUser(@Param("userIds")Integer[] userIds);
}